### 5.41 `strtok`, `strtok_r`, `strsep`—get next token from a string

Synopsis

         #include <string.h>
         char *strtok(char *restrict source,
             const char *restrict delimiters);
         char *strtok_r(char *restrict source,
             const char *restrict delimiters,
             char **lasts);
         char *strsep(char **source_ptr, const char *delimiters);

Description
The `strtok` function is used to isolate sequential tokens in a null-terminated string, `*`source. These tokens are delimited in the string by at least one of the characters in `*`delimiters. The first time that `strtok` is called, `*`source should be specified; subsequent calls, wishing to obtain further tokens from the same string, should pass a null pointer instead. The separator string, `*`delimiters, must be supplied each time and may change between calls.

The `strtok` function returns a pointer to the beginning of each subsequent token in the string, after replacing the separator character itself with a null character. When no more tokens remain, a null pointer is returned.

The `strtok_r` function has the same behavior as `strtok`, except a pointer to placeholder `*`lasts must be supplied by the caller.

The `strsep` function is similar in behavior to `strtok`, except a pointer to the string pointer must be supplied source_ptr and the function does not skip leading delimiters. When the string starts with a delimiter, the delimiter is changed to the null character and the empty string is returned. Like `strtok_r` and `strtok`, the `*`source_ptr is updated to the next character following the last delimiter found or NULL if the end of string is reached with no more delimiters.

Returns
`strtok`, `strtok_r`, and `strsep` all return a pointer to the next token, or `NULL` if no more tokens can be found. For `strsep`, a token may be the empty string.

Portability
`strtok` is ANSI C. `strtok_r` is POSIX. `strsep` is a BSD extension.

`strtok`, `strtok_r`, and `strsep` require no supporting OS subroutines.